import { defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

import legacy from '@vitejs/plugin-legacy' // 兼容浏览器
// import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' // svg

import compressPlugin from 'vite-plugin-compression' // 压缩

import cesium from 'vite-plugin-cesium'; // 引入cesium插件 

// 自动按需引入element组件，自动引入所需要的api
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/
export default defineConfig(({ mode }) => ({
  // base: '/',
  server: {
    host: true, // host设置为true才可以使用network的形式，以ip访问项目
    port: 8888, // 端口号
    open: true, // 自动打开浏览器
    cors: true, // 跨域设置允许
    proxy: {
      '/baseUrl': {
        target: 'http://10.10.100.111:7286',  //后台
        changeOrigin: true,
        rewrite: (pathStr) => pathStr.replace(/^\/baseUrl/, ''),
      }

    },
  },
  build: {
    // outDir: `dist-${dayjs().format('MMDD')}-${mode}`, // 文件夹命名
    target: 'modules', // modules, browser, node, electron
    minify: 'esbuild', // esbuild, terser, none
    cssCodeSplit: true, // 启用/禁用 CSS 代码拆分
    chunkSizeWarningLimit: 600, // 规定触发警告的 chunk 大小。（以 kbs 为单位）
    rollupOptions: {
      output: {
        //静态资源分类打包
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
        manualChunks(id) {
          //静态资源分拆打包
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString()
          }
        },
      },
    },
  },
  optimizeDeps: {
    // 依赖优化选项
    include: [], // 构建node_modules里的依赖
    exclude: [], // 在预构建中强制排除的依赖项
  },
  resolve: {
    alias: {
      '@': path.resolve(process.cwd(), 'src'),
    },
    extensions: ['.js', '.ts', '.jsx', '.tsx', '.json', '.vue','.b3dm'],
  },
  plugins: [
    vue(),
    cesium(),
    legacy({
      targets: ['defaults', 'not IE 11'],
    }),
    compressPlugin({
      verbose: false, // 是否在控制台输出压缩结果
      disable: false, // 是否禁用
      threshold: 10240, // 文件容量大于这个值进行压缩，它将被压缩，单位为b
      algorithm: 'gzip', // 压缩算法 可选 ['gzip','brotliCompress' ,'deflate','deflateRaw']
      ext: '.gz', // 生成的压缩包后缀
    }),
    AutoImport({
      dts: './src/auto-imports.d.ts',
      imports: [
        'vue',
        'vue-router',
        'pinia',
        {
          axios: [
            // default imports
            ['default', 'axios'], // import { default as axios } from 'axios',
          ],
        },
      ],
      // Generate corresponding .eslintrc-auto-import.json file.
      // eslint globals Docs - https://eslint.org/docs/user-guide/configuring/language-options#specifying-globals
      eslintrc: {
        enabled: true, // Default `false`
        filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`
        globalsPropValue: true, // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
      },
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      dts: './src/components.d.ts', // 启用/禁用 .d.ts 文件
      // dirs 指定组件所在位置，默认为 src/components, 可以让我们使用自己定义组件的时候免去 import 的麻烦
      dirs: ['src/components/', 'src/views/components/'],
      // 配置需要将哪些后缀类型的文件进行自动按需引入
      extensions: ['vue'],
      // 解析 UI 组件库
      resolvers: [ElementPlusResolver()],
    }),
    // createSvgIconsPlugin({
    //   // 指定需要缓存的图标文件夹
    //   iconDirs: [path.resolve(process.cwd(), 'src/icons')],
    //   // 指定symbolId格式
    //   symbolId: 'icon-[dir]-[name]',
    // }),
  ],
}))
